#pragma once
#include <string>
#include <list>

#include "../ast/Object.h"
#include "SQLASTVisitor.h"

// #include "functions/Function.h"

class SQLEvalVisitor  : virtual public SQLASTVisitor  {

	public:
		static string_ptr  EVAL_VALUE;
		static string_ptr  EVAL_EXPR;
		static Object_ptr  EVAL_ERROR;
		static Object_ptr  EVAL_VALUE_COUNT;
		static Object_ptr  EVAL_VALUE_NULL;

		virtual ~SQLEvalVisitor();
		virtual SQLFunction* getFunction(std::string  funcName) = 0;

		virtual void registerFunction(std::string  funcName, SQLFunction* function) = 0;

		virtual void unregisterFunction(std::string  funcName) = 0;

		virtual Object_list_ptr  getParameters() = 0;

		virtual void setParameters(Object_list_ptr  parameters) = 0;

		virtual int incrementAndGetVariantIndex() = 0;

		virtual bool isMarkVariantIndex() = 0;

		virtual void setMarkVariantIndex(bool markVariantIndex) = 0;
};


